﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

namespace AIC_KQKT
{
    public partial class FormDanhMucBaoCao : System.Web.UI.Page
    {
        private static int FatherID;
        private PrepareDataForTreeViewDM DataForTreeViewDM = new PrepareDataForTreeViewDM();
        private static int MaDM = 0;
        private static int IDDM = 0;
        #region Ham chuc nang

        protected void UpdateDonVi(int ID, string STT, string TenDM, int LaToChuc, string BoiDen)
        {
            SqlTransaction MyTran = SqlHelper.BeginTransaction();
            try
            {
                List<SqlParameter> arrParams = new List<SqlParameter>();
                arrParams.Add(SqlHelper.CreateParameterObject("@ID", SqlDbType.Int, ParameterDirection.Input, ID));
                arrParams.Add(SqlHelper.CreateParameterObject("@STT", SqlDbType.VarChar, ParameterDirection.Input, STT));
                arrParams.Add(SqlHelper.CreateParameterObject("@TenDM", SqlDbType.NVarChar, ParameterDirection.Input, TenDM));
                arrParams.Add(SqlHelper.CreateParameterObject("@LaToChuc", SqlDbType.Int, ParameterDirection.Input, LaToChuc));
                arrParams.Add(SqlHelper.CreateParameterObject("@BoiDen", SqlDbType.NVarChar, ParameterDirection.Input, BoiDen));
                arrParams.Add(SqlHelper.CreateParameterObject("@UserID", SqlDbType.Int, ParameterDirection.Input, Session["userid"]));
                string sql = "UPDATE [tblDanhMucBaoCao] SET [STT] = @STT,[TenDM] = @TenDM,[BoiDen] = @BoiDen,[LaToChuc] = @LaToChuc" +
                             ",[UpdateDate] = GETDATE(),[UserID] = @UserID WHERE ID = @ID";
                SqlHelper.ExecuteNonQuery(CommandType.Text, sql, arrParams);
                MyTran.Commit();
                MyCommon.AddMessage(this.Page.Master, "Cập nhật đối tượng thành công !", MyConst.MessageType.Success);
            }
            catch
            {
                MyTran.Rollback();
                MyCommon.AddMessage(this.Page.Master, "Cập nhật đối tượng xảy ra lỗi !", MyConst.MessageType.Error);
            }
        }

        protected void ThemMoiDonVi(int MaDonVi,string STT, string TenDonVi, string BoiDen, string LaToChuc, int FatherID, string ParentID, int UserID)
        {
            SqlTransaction MyTran = SqlHelper.BeginTransaction();
            try
            {
                List<SqlParameter> arrParams = new List<SqlParameter>();
                arrParams.Add(SqlHelper.CreateParameterObject("@MaDM", SqlDbType.Int, ParameterDirection.Input, MaDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@STT", SqlDbType.VarChar, ParameterDirection.Input, STT));
                arrParams.Add(SqlHelper.CreateParameterObject("@TenDM", SqlDbType.NVarChar, ParameterDirection.Input, TenDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@BoiDen", SqlDbType.NVarChar, ParameterDirection.Input, BoiDen));
                arrParams.Add(SqlHelper.CreateParameterObject("@LaToChuc", SqlDbType.Int, ParameterDirection.Input, LaToChuc));
                arrParams.Add(SqlHelper.CreateParameterObject("@FatherID", SqlDbType.Int, ParameterDirection.Input, FatherID));
                arrParams.Add(SqlHelper.CreateParameterObject("@ParentID", SqlDbType.NVarChar, ParameterDirection.Input, ParentID));
                arrParams.Add(SqlHelper.CreateParameterObject("@UserID", SqlDbType.Int, ParameterDirection.Input, UserID));

                string sql = "INSERT INTO dbo.tblDanhMucBaoCao(" +
                             "MaDM,STT,TenDM,BoiDen,LaToChuc,FatherID,ParentID,CreateDate,UpdateDate,UserID) " +
                             "VALUES (@MaDM,@STT,@TenDM,@BoiDen,@LaToChuc,@FatherID,@ParentID,GETDATE(),GETDATE(),@UserID) " +
                             "DECLARE @ParentIDString NVARCHAR(50) " +
                             "SET @ParentIDString = (SELECT ParentID FROM dbo.tblDanhMucBaoCao WHERE ID = @FatherID) " +
                             "UPDATE dbo.tblDanhMucBaoCao SET ParentID = @ParentIDString + CONVERT(VARCHAR(5),IDENT_CURRENT('dbo.tblDanhMucBaoCao')) + ';' " +
                             "WHERE ID = IDENT_CURRENT('dbo.tblDanhMucBaoCao')";
                SqlHelper.ExecuteNonQuery(CommandType.Text, sql, arrParams);
                MyTran.Commit();
                MyCommon.AddMessage(this.Page.Master, "Thêm mới đối tượng thành công !", MyConst.MessageType.Success);
            }
            catch
            {
                MyTran.Rollback();
                MyCommon.AddMessage(this.Page.Master, "Thêm mới đối tượng xảy ra lỗi !", MyConst.MessageType.Error);
            }
        }

        protected void ThemMoiOneDonVi(int MaDonVi,string STT, string TenDonVi, string BoiDen, string LaToChuc, int UserID)
        {
            SqlTransaction MyTran = SqlHelper.BeginTransaction();
            try
            {
                List<SqlParameter> arrParams = new List<SqlParameter>();
                arrParams.Add(SqlHelper.CreateParameterObject("@MaDM", SqlDbType.Int, ParameterDirection.Input, MaDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@STT", SqlDbType.NVarChar, ParameterDirection.Input, STT));
                arrParams.Add(SqlHelper.CreateParameterObject("@TenDM", SqlDbType.NVarChar, ParameterDirection.Input, TenDonVi));
                arrParams.Add(SqlHelper.CreateParameterObject("@BoiDen", SqlDbType.NVarChar, ParameterDirection.Input, BoiDen));
                arrParams.Add(SqlHelper.CreateParameterObject("@LaToChuc", SqlDbType.Int, ParameterDirection.Input, LaToChuc));
                arrParams.Add(SqlHelper.CreateParameterObject("@UserID", SqlDbType.Int, ParameterDirection.Input, UserID));

                string sql = "DECLARE @FatherID NVARCHAR(10)" +
                             "SET @FatherID = IDENT_CURRENT('dbo.tblDanhMucBaoCao') + 1" +
                             "INSERT INTO dbo.tblDanhMucBaoCao(" +
                             "MaDM,STT,TenDM,BoiDen,LaToChuc,FatherID,ParentID,CreateDate,UpdateDate,UserID) " +
                             "VALUES (@MaDM,@STT,@TenDM,@BoiDen,@LaToChuc,@FatherID,@FatherID+';',GETDATE(),GETDATE(),@UserID) ";
                SqlHelper.ExecuteNonQuery(CommandType.Text, sql, arrParams);
                MyTran.Commit();
                MyCommon.AddMessage(this.Page.Master, "Thêm mới đối tượng thành công !", MyConst.MessageType.Success);
            }
            catch
            {
                MyTran.Rollback();
                MyCommon.AddMessage(this.Page.Master, "Thêm mới đối tượng xảy ra lỗi !", MyConst.MessageType.Error);
            }
        }

        protected DataTable GetChiTietDonVi(int IDDonVi)
        {
            List<SqlParameter> arrParams = new List<SqlParameter>();
            arrParams.Add(SqlHelper.CreateParameterObject("@ID", SqlDbType.Int, ParameterDirection.Input, IDDonVi));
            return SqlHelper.ExecuteDataTable(CommandType.Text, "Select * from tblDanhMucBaoCao where ID = @ID", arrParams);
        }

        protected DataTable XoaDonVi(int IDDonVi)
        {
            List<SqlParameter> arrParams = new List<SqlParameter>();
            arrParams.Add(SqlHelper.CreateParameterObject("@ID", SqlDbType.Int, ParameterDirection.Input, IDDonVi));
            return SqlHelper.ExecuteDataTable(CommandType.Text, "DELETE FROM tblDanhMucBaoCao where ID = @ID", arrParams);
        }

        protected void BindDataToTreeView()
        {
            trvDonVi.Nodes.Clear();
            DataForTreeViewDM.PopulateRootLevel(trvDonVi, MaDM);
            trvDonVi.ExpandAll();
        }

        protected void BindDataToDropDown()
        {
            DataTable dt = SqlHelper.ExecuteDataTable(CommandType.Text, "SELECT * FROM dbo.tblDanhMuc WHERE MaDM = 'DanhMucTenBaoCao'");
            ddlTenBaoCao.DataSource = dt;
            ddlTenBaoCao.DataTextField = "TenDM";
            ddlTenBaoCao.DataValueField = "ID";
            ddlTenBaoCao.DataBind();
            ddlTenBaoCao.Items.Insert(0, new ListItem("Chọn báo cáo", "0"));
        }

        /// <summary>
        /// Thủ tục kiểm tra quyền sử dụng của người dùng có được quyền truy cập vào mục này hay không?
        /// </summary>
        private void CheckPermission()
        {
            Dictionary<string, int> Role = MyCommon.CheckPermission("DanhMucBaoCao");
            if (Role == null || Role["Xem"] == 0)
            {
                Response.Redirect("Index.aspx?p=0");
            }
        }
        #endregion Ham chuc nang

        protected void Page_Load(object sender, EventArgs e)
        {
            CheckPermission();
            if (!IsPostBack)
            {
                BindDataToDropDown();
            }
            int UserID = Convert.ToInt32(Session["userid"]);
        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("index.aspx");
        }

        protected void trvDonVi_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            DataForTreeViewDM.PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
        }

        protected void trvDonVi_SelectedNodeChanged(object sender, EventArgs e)
        {
            btnThemMoi.Visible = true;
            formUpdate.Visible = true;
            IDDM = Convert.ToInt32(trvDonVi.SelectedValue);
            DataTable ThongTinDonVi = GetChiTietDonVi(IDDM);
            txtSTT.Text = ThongTinDonVi.Rows[0]["STT"].ToString();
            txtTenDoiTuong.Text = ThongTinDonVi.Rows[0]["TenDM"].ToString();
            ddlLoaiDoiTuong.SelectedValue = ThongTinDonVi.Rows[0]["LaToChuc"].ToString();
            txtBoiDenTu.Text = ThongTinDonVi.Rows[0]["BoiDen"].ToString();
            FatherID = Convert.ToInt32(ThongTinDonVi.Rows[0]["FatherID"]);
            btnLuu.CommandName = MyConst.Action.Update;
        }

        protected void btnLuu_Click(object sender, EventArgs e)
        {
            try
            {
                string BoiDen = "";
                if (!txtBoiDenTu.Text.Equals(""))
                {
                    if (txtBoiDenTu.Text.Split(',').Length == 1)
                    {
                        if (txtBoiDenTu.Text.Split('-').Length == 2)
                        {
                            for (int i = Convert.ToInt32(txtBoiDenTu.Text.Split('-')[0]); i <= Convert.ToInt32(txtBoiDenTu.Text.Split('-')[1]); i++)
                            {
                                BoiDen += i + ",";
                            }
                        }
                        else
                        {
                            BoiDen = txtBoiDenTu.Text + ",";
                        }
                    }
                    else
                    {
                        for (int i = 0; i < txtBoiDenTu.Text.Split(',').Length; i++)
                        {
                            if (txtBoiDenTu.Text.Split(',')[i].Contains('-'))
                            {
                                string k = txtBoiDenTu.Text.Split(',')[i];
                                for (int j = Convert.ToInt32(k.Split('-')[0]); j <= Convert.ToInt32(k.Split('-')[1]); j++)
                                {
                                    BoiDen += j + ",";
                                }
                            }
                            else
                            {
                                BoiDen += txtBoiDenTu.Text.Split(',')[i] + ",";
                            }
                        }
                    }
                    BoiDen = BoiDen.Substring(0, BoiDen.Length - 1);
                }
                int UserID = Convert.ToInt32(Session["userid"]);
                if (btnLuu.CommandName == MyConst.Action.Update)
                {
                    UpdateDonVi(IDDM,txtSTT.Text, txtTenDoiTuong.Text, Convert.ToInt32(ddlLoaiDoiTuong.SelectedValue), BoiDen);
                    BindDataToTreeView();
                }
                else if (btnLuu.CommandName == MyConst.Action.Addnew)
                {

                    ThemMoiDonVi(MaDM,txtSTT.Text, txtTenDoiTuong.Text, BoiDen, ddlLoaiDoiTuong.SelectedValue, FatherID, "", UserID);
                    BindDataToTreeView();
                }
                else if (btnLuu.CommandName == MyConst.Action.AddOnenew)
                {
                    ThemMoiOneDonVi(MaDM,txtSTT.Text, txtTenDoiTuong.Text, BoiDen, ddlLoaiDoiTuong.SelectedValue, UserID);
                    BindDataToTreeView();
                }
            }
            catch (Exception)
            {
                MyCommon.AddMessage(this.Page.Master, "Có lỗi xảy ra trong quá trình thao tác !", MyConst.MessageType.Error);
            }
        }

        protected void btnHuy_Click(object sender, EventArgs e)
        {
            txtTenDoiTuong.Text = "";
            ddlLoaiDoiTuong.SelectedValue = "-1";
            txtBoiDenTu.Text = "";
            txtSTT.Text = "";
        }

        protected void ddlTenBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnThemMoiMot.Visible = true;
            formUpdate.Visible = false;
            MaDM = Convert.ToInt32(ddlTenBaoCao.SelectedValue);
            trvDonVi.Nodes.Clear();
            DataForTreeViewDM.PopulateRootLevel(trvDonVi, MaDM);
            btnLuu.CommandName = MyConst.Action.Update;
            int select = Convert.ToInt32(ddlTenBaoCao.SelectedValue);
            ddlLoaiDoiTuong.Items.Clear();
            if (select == 78 || select == 88 || select == 89 || select == 90 || select == 99)
            {
                ddlLoaiDoiTuong.Items.Add(new ListItem("Đảng viên","0"));
                ddlLoaiDoiTuong.Items.Add(new ListItem("Tổ chức Đảng","1"));
            }
            else if (select == 97 || select == 98)
            {
                ddlLoaiDoiTuong.Items.Add(new ListItem("A - Hình thức xử lý đối với từng đối tượng", "1"));
                ddlLoaiDoiTuong.Items.Add(new ListItem("B - Nội dung vi phạm và hình thức xử lý", "0"));
            }
            else if (select == 100)
            {
                ddlLoaiDoiTuong.Items.Add(new ListItem("A - Số lượng,cơ cấu UBKT các cấp","0"));
                ddlLoaiDoiTuong.Items.Add(new ListItem("B - Số lượng,chất lượng cán bộ kiểm tra chuyên trách","1"));
                ddlLoaiDoiTuong.Items.Add(new ListItem("C - Bội dưỡng nghiệp vụ công tác kiểm tra giám sát","2"));
            }
            else
            {
                ddlLoaiDoiTuong.Items.Add(new ListItem("Đối tượng kiểm tra", "0"));
            }
            ddlLoaiDoiTuong.DataBind();
            ddlLoaiDoiTuong.Items.Insert(0, new ListItem("Chọn loại đối tượng", "-1"));
        }

        protected void btnXoa_Click(object sender, EventArgs e)
        {
            try
            {
                TreeNode CurentNode = trvDonVi.SelectedNode;
                if (CurentNode.ChildNodes.Count > 0)
                {
                    MyCommon.AddMessage(this.Page.Master, "Không thể xóa đối tượng cấp cha !", MyConst.MessageType.Warning);
                }
                else
                {
                    XoaDonVi(Convert.ToInt32(CurentNode.Value));
                    MyCommon.AddMessage(this.Page.Master, "Xóa đối tượng thành công !", MyConst.MessageType.Success);
                    BindDataToTreeView();
                }
            }
            catch (Exception)
            {
                MyCommon.AddMessage(this.Page.Master, "Có lỗi xảy ra trong quá trình thao tác !", MyConst.MessageType.Error);
            }
        }

        protected void btnThemMoi_Click(object sender, EventArgs e)
        {
            formUpdate.Visible = true;
            btnLuu.CommandName = MyConst.Action.Addnew;
            txtTenDoiTuong.Text = "";
            ddlLoaiDoiTuong.SelectedValue = "-1";
            txtBoiDenTu.Text = "";
            txtSTT.Text = "";
        }

        protected void btnThemMoiMot_Click(object sender, EventArgs e)
        {
            formUpdate.Visible = true;
            btnLuu.CommandName = MyConst.Action.AddOnenew;
            txtTenDoiTuong.Text = "";
            ddlLoaiDoiTuong.SelectedValue = "-1";
            txtBoiDenTu.Text = "";
            txtSTT.Text = "";
        }
    }
}
